package com.uco.sample;

public class Array {
    public static void main(String[] args) {
        dynamicTwoArray();
    }

    // 数组里元素的数据类型都是一致的
    public static void staticArray() {
        // 声明静态数组
//        String[] students = {"张三", "李四", "王五"};
//        String students[] = new String[]{"张三", "李四", "王五"};
        String[] students = new String[]{"张三", "李四", "王五"};

        // 输出数组(对象)的地址
        System.out.println(students);

        // Math.random() 返回一个伪随机数，范围是[0,1)
        int i = (int) (Math.random() * students.length);
        // 通过索引下标找到数组元素
        System.out.println(students[i]);
    }

    // 动态声明数组, 数组元素会有默认值，取决于数组的类型
    public static void dynamicArray() {
        // 动态声明数组，不需要初始化赋值，只要声明数组类型和长度即可
        int[] score = new int[5];
        for (int i = 0; i < score.length; ++i) {
            score[i] = i;
        }
        for (int i : score) {
            System.out.println(i);
        }
    }

    // 静态二维数组
    public static void staticTwoArray() {
        int[][] score = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}};
        for (int i = 0; i < score.length; ++i) {
            for (int j = 0; j < score[i].length; ++j) {
                System.out.println(score[i][j]);
            }
        }
    }

    // 动态二维数组
    // 二维数组的长度要确定（和一维一样），但是二维数组的每一维的长度可以不同，可以不用声明
    public static void dynamicTwoArray() {
        int[][] score = new int[2][];
        score[0] = new int[]{1, 2, 3, 4};
        score[1] = new int[]{5, 6, 7};
        for (int i = 0; i < score.length; ++i) {
            for (int j = 0; j < score[i].length; ++j) {
                System.out.println(score[i][j]);
            }
        }
    }
}
